#include<bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn=8;
int n,m;
int matrix[maxn][maxn];
vector<int> v; // 记录每行都可以是什么值
int dp[maxn][(1<<5)][(1<<5)]; // 因为是 3 个连续的
// 表示 第 i 行为 j 且 i-1 行为 k 时的种数


// 判断是否有三个连续的 1
bool check(int x){
	int cnt=0;
	for(int i=0;i<=4;i++){
		if((x>>i)&1){
			cnt++;
		} else {
			cnt=0;
		}
		if(cnt==3){
			return false;
		}
	}
	return true;
}


void solve(){
	cin>>n>>m;
	for(int i=0;i<(1<<m);i++){
		if(check(i)){
			v.push_back(i);
		}
	}
	
	int size=v.size();

	// 一定要初始化
	for(int i=0;i<size;i++){
		dp[1][v[i]][0]=1;
	}
	for(int i=2;i<=n;i++){
		for(int j=0;j<size;j++){
			for(int k=0;k<size;k++){
				for(int p=0;p<size;p++){
					if((v[j]&v[k]&v[p])==0){ // 不存在一列 3 个 1  
						dp[i][v[j]][v[k]]+=dp[i-1][v[k]][v[p]];
					}
				}
			}
		}
	}
	int ans=0;
	for(int j=0;j<size;j++){
		for(int k=0;k<size;k++){
			ans+=dp[n][v[j]][v[k]];			
		}
	}
	cout<<ans<<'\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0),cout.tie(0);
	solve();
	return 0;
}
